﻿/*
 Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */

(function () {
    function a(d, e, f) {
        if (!e.is || !e.getCustomData('block_processed')) {
            e.is && CKEDITOR.dom.element.setMarker(f, e, 'block_processed', true);
            d.push(e);
        }
    };
    function b(d) {
        var e = [], f = d.getChildren();
        for (var g = 0; g < f.count(); g++) {
            var h = f.getItem(g);
            if (!(h.type === CKEDITOR.NODE_TEXT && /^[ \t\n\r]+$/.test(h.getText())))e.push(h);
        }
        return e;
    };
    function c(d, e) {
        var f = (function () {
            var p = CKEDITOR.tools.extend({}, CKEDITOR.dtd.$blockLimit);
            delete p.div;
            if (d.config.div_wrapTable) {
                delete p.td;
                delete p.th;
            }
            return p;
        })(), g = CKEDITOR.dtd.div;

        function h(p) {
            var q = new CKEDITOR.dom.elementPath(p).elements, r;
            for (var s = 0; s < q.length; s++) {
                if (q[s].getName() in f) {
                    r = q[s];
                    break;
                }
            }
            return r;
        };
        function i() {
            this.foreach(function (p) {
                if (/^(?!vbox|hbox)/.test(p.type)) {
                    if (!p.setup)p.setup = function (q) {
                        p.setValue(q.getAttribute(p.id) || '');
                    };
                    if (!p.commit)p.commit = function (q) {
                        var r = this.getValue();
                        if ('dir' == p.id && q.getComputedStyle('direction') == r)return;
                        if (r)q.setAttribute(p.id, r); else q.removeAttribute(p.id);
                    };
                }
            });
        };
        function j(p) {
            var q = [], r = {}, s = [], t, u = p.document.getSelection(), v = u.getRanges(), w = u.createBookmarks(), x, y, z = p.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p';
            for (x = 0; x < v.length; x++) {
                y = v[x].createIterator();
                while (t = y.getNextParagraph()) {
                    if (t.getName() in f) {
                        var A, B = t.getChildren();
                        for (A = 0; A < B.count(); A++)a(s, B.getItem(A), r);
                    } else {
                        while (!g[t.getName()] && t.getName() != 'body')t = t.getParent();
                        a(s, t, r);
                    }
                }
            }
            CKEDITOR.dom.element.clearAllMarkers(r);
            var C = l(s), D, E, F;
            for (x = 0; x < C.length; x++) {
                var G = C[x][0];
                D = G.getParent();
                for (A = 1; A < C[x].length; A++)D = D.getCommonAncestor(C[x][A]);
                F = new CKEDITOR.dom.element('div', p.document);
                for (A = 0; A < C[x].length; A++) {
                    G = C[x][A];
                    while (!G.getParent().equals(D))G = G.getParent();
                    C[x][A] = G;
                }
                var H = null;
                for (A = 0; A < C[x].length; A++) {
                    G = C[x][A];
                    if (!(G.getCustomData && G.getCustomData('block_processed'))) {
                        G.is && CKEDITOR.dom.element.setMarker(r, G, 'block_processed', true);
                        if (!A)F.insertBefore(G);
                        F.append(G);
                    }
                }
                CKEDITOR.dom.element.clearAllMarkers(r);
                q.push(F);
            }
            u.selectBookmarks(w);
            return q;
        };
        function k(p) {
            var q = new CKEDITOR.dom.elementPath(p.getSelection().getStartElement()), r = q.blockLimit, s = r && r.getAscendant('div', true);
            return s;
        };
        function l(p) {
            var q = [], r = null, s, t;
            for (var u = 0; u < p.length; u++) {
                t = p[u];
                var v = h(t);
                if (!v.equals(r)) {
                    r = v;
                    q.push([]);
                }
                q[q.length - 1].push(t);
            }
            return q;
        };
        function m(p) {
            var q = this.getDialog(), r = q._element && q._element.clone() || new CKEDITOR.dom.element('div', d.document);
            this.commit(r, true);
            p = [].concat(p);
            var s = p.length, t;
            for (var u = 0; u < s; u++) {
                t = q.getContentElement.apply(q, p[u].split(':'));
                t && t.setup && t.setup(r, true);
            }
        };
        var n = {}, o = [];
        return {
            title: d.lang.div.title,
            minWidth: 400,
            minHeight: 165,
            contents: [{
                id: 'info',
                label: d.lang.common.generalTab,
                title: d.lang.common.generalTab,
                elements: [{
                    type: 'hbox',
                    widths: ['50%', '50%'],
                    children: [{
                        id: 'elementStyle',
                        type: 'select',
                        style: 'width: 100%;',
                        label: d.lang.div.styleSelectLabel,
                        'default': '',
                        items: [[d.lang.common.notSet, '']],
                        onChange: function () {
                            m.call(this, ['info:class', 'advanced:dir', 'advanced:style']);
                        },
                        setup: function (p) {
                            for (var q in n)n[q].checkElementRemovable(p, true) && this.setValue(q);
                        },
                        commit: function (p) {
                            var q;
                            if (q = this.getValue()) {
                                var r = n[q], s = p.getCustomData('elementStyle') || '';
                                r.applyToObject(p);
                                p.setCustomData('elementStyle', s + r._.definition.attributes.style);
                            }
                        }
                    }, {id: 'class', type: 'text', label: d.lang.common.cssClass, 'default': ''}]
                }]
            }, {
                id: 'advanced',
                label: d.lang.common.advancedTab,
                title: d.lang.common.advancedTab,
                elements: [{
                    type: 'vbox',
                    padding: 1,
                    children: [{
                        type: 'hbox',
                        widths: ['50%', '50%'],
                        children: [{type: 'text', id: 'id', label: d.lang.common.id, 'default': ''}, {
                            type: 'text',
                            id: 'lang',
                            label: d.lang.link.langCode,
                            'default': ''
                        }]
                    }, {
                        type: 'hbox',
                        children: [{
                            type: 'text',
                            id: 'style',
                            style: 'width: 100%;',
                            label: d.lang.common.cssStyle,
                            'default': '',
                            commit: function (p) {
                                var q = this.getValue() + (p.getCustomData('elementStyle') || '');
                                p.setAttribute('style', q);
                            }
                        }]
                    }, {
                        type: 'hbox',
                        children: [{
                            type: 'text',
                            id: 'title',
                            style: 'width: 100%;',
                            label: d.lang.common.advisoryTitle,
                            'default': ''
                        }]
                    }, {
                        type: 'select',
                        id: 'dir',
                        style: 'width: 100%;',
                        label: d.lang.common.langDir,
                        'default': '',
                        items: [[d.lang.common.notSet, ''], [d.lang.common.langDirLtr, 'ltr'], [d.lang.common.langDirRtl, 'rtl']]
                    }]
                }]
            }],
            onLoad: function () {
                i.call(this);
                var p = this, q = this.getContentElement('info', 'elementStyle');
                d.getStylesSet(function (r) {
                    var s;
                    if (r)for (var t = 0; t < r.length; t++) {
                        var u = r[t];
                        if (u.element && u.element == 'div') {
                            s = u.name;
                            n[s] = new CKEDITOR.style(u);
                            q.items.push([s, s]);
                            q.add(s, s);
                        }
                    }
                    q[q.items.length > 1 ? 'enable' : 'disable']();
                    setTimeout(function () {
                        q.setup(p._element);
                    }, 0);
                });
            },
            onShow: function () {
                if (e == 'editdiv') {
                    var p = k(d);
                    p && this.setupContent(this._element = p);
                }
            },
            onOk: function () {
                if (e == 'editdiv')o = [this._element]; else o = j(d, true);
                var p = o.length;
                for (var q = 0; q < p; q++) {
                    this.commitContent(o[q]);
                    !o[q].getAttribute('style') && o[q].removeAttribute('style');
                }
                this.hide();
            },
            onHide: function () {
                if (e == 'editdiv')this._element.removeCustomData('elementStyle');
                delete this._element;
            }
        };
    };
    CKEDITOR.dialog.add('creatediv', function (d) {
        return c(d, 'creatediv');
    });
    CKEDITOR.dialog.add('editdiv', function (d) {
        return c(d, 'editdiv');
    });
})();
